﻿using System;

/***********发布器类***********/
public class EventTest
{
    public delegate void NumManipulationHandler(string name, int a); // 声明委托
    public event NumManipulationHandler ChangeNum; // 声明事件

    public void OpenDoor(string name,int a) // 模拟事件
    {
        ChangeNum(name, a); // 触发事件
    }
}

/***********订阅器类***********/
public class SubscribEvent
{
    public void Result(string name,int a)
    {
        Console.WriteLine("{0} is arriving at Airport Terminal {1}.", name, a);
    }
}

/***********触发***********/
public class MainClass
{
    public static void Main()
    {
        EventTest e = new EventTest(); // 实例化事件触发对象
        SubscribEvent v = new SubscribEvent(); // 实例化订阅事件对象

        /* 订阅器的Result()在事件触发对象中注册到委托事件中 */
        e.ChangeNum += new EventTest.NumManipulationHandler(v.Result);
        e.OpenDoor("Yang", 3); /* 模拟事件 */

        Console.ReadKey();
    }
}
/*
 
C# 这种事件—响应类比 Python 的信号和槽机制。
同时，事件—响应的参数传递是默认的。委托定义好事件和响应函数的输入输出类型，然后事件的参数会自动传递给响应函数。
 
 */